package com.aijk.web.admin.utils;

import java.awt.Color;
import java.io.FileOutputStream;
import java.util.List;
import com.aijk.web.admin.entity.ext.QuestionExtInfo;
import com.lowagie.text.*;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;

public class PdfUtils {
    public static void dowmPDF(String filePath , String fontPath , List<QuestionExtInfo> list , Integer count) throws Exception{
            //创建Document对象
            Document doc=new Document(PageSize.A4,0,0,50,0);

            //获得PdfWriter实例，将文档放到输出流上
            PdfWriter.getInstance(doc, new FileOutputStream(filePath));

            //字体设置
                /*
                 * 由于itext不支持中文，所以需要进行字体的设置，我这里让itext调用windows系统的中文字体，
                 * 找到文件后，打开属性，将文件名及所在路径作为字体名即可。
                 */
            //创建BaseFont对象，指明字体，编码方式,是否嵌入
            BaseFont bf=BaseFont.createFont(/*"C:\\niney\\simkai.ttf"*/fontPath, BaseFont.IDENTITY_H, false);
//        BaseFont bf = BaseFont.createFont("STSong-Light",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
        //创建Font对象，将基础字体对象，字体大小，字体风格
            Font font=new Font(bf,11,Font.NORMAL);
            Font font1=new Font(bf,13,Font.BOLD);

            Font font2=new Font(bf, 11, Font.NORMAL, new Color(112, 199, 177));

            //创建PdfTable对象
            PdfPTable table=new PdfPTable(5);

            //设置各列的列宽
            table.setTotalWidth(new float[]{ 400, 150, 300, 200, 200});
            PdfPCell  cell=mergeCol("调查问卷", font, 0);
            table.addCell(cell);
            cell=mergeCol("调查人数", font, 0);
            table.addCell(cell);
            cell=mergeCol("可选项", font, 0);
            table.addCell(cell);
            cell=mergeCol("数量", font, 0);
            table.addCell(cell);
            cell=mergeCol("占比(%)", font, 0);
            table.addCell(cell);

            for (int i = 0 ; i < list.size() ; i++) {
                if(i == 0){
                    cell=mergeColNoHorizontal("*基本信息", font2, 5);
                    table.addCell(cell);
                }

                if(i == 2){
                    cell=mergeColNoHorizontal("*个人现状 (可多选)", font2, 5);
                    table.addCell(cell);
                }

                if(i == 4){
                    cell=mergeColNoHorizontal("*健康企业创建意见和建议", font2, 5);
                    table.addCell(cell);
                }

                List<QuestionExtInfo.QestionInfoItem> itemData = list.get(i).getItems();
                Integer itemLenth = itemData.size();
                cell=mergeRow(list.get(i).getTitle(), font, itemLenth );
                table.addCell(cell);

                cell=mergeRow(count+"", font,  itemLenth);
                table.addCell(cell);


                for (QuestionExtInfo.QestionInfoItem  item : itemData) {
                    cell=mergeCol(item.getTitle(), font, 0);
                    table.addCell(cell);
                    cell=mergeCol(item.getNo()+"", font, 0);
                    table.addCell(cell);
                    cell=mergeCol(item.getPercentile()+"%", font, 0);
                    table.addCell(cell);
                }
            }

            //文档写入内容
            doc.open();
            Paragraph title=new Paragraph("问卷列表分析\n\n",font1);
            title.setAlignment(Paragraph.ALIGN_CENTER);
            doc.add(title);
            doc.add(table);
            doc.close();
    }


    //合并行的静态函数
    public static PdfPCell mergeRow(String str,Font font,int i) {
          
        //创建单元格对象，将内容及字体传入  
        PdfPCell cell=new PdfPCell(new Paragraph(str,font));  
        //设置单元格内容居中  
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);  
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);  
        //将该单元格所在列包括该单元格在内的i行单元格合并为一个单元格  
        cell.setRowspan(i);  
          
        return cell;  
    }

    public static PdfPCell mergeRowCol(String str,Font font,int i , int j) {
        //创建单元格对象，将内容及字体传入
        PdfPCell cell=new PdfPCell(new Paragraph(str,font));
        //设置单元格内容居中
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        //将该单元格所在列包括该单元格在内的i行单元格合并为一个单元格
        cell.setRowspan(i);
        cell.setColspan(j);
        return cell;
    }

    //合并列的静态函数
    public static PdfPCell mergeCol(String str,Font font,int i) {
        PdfPCell cell=new PdfPCell(new Paragraph(str,font));
        cell.setMinimumHeight(25);  
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);  
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);  
        //将该单元格所在行包括该单元格在内的i列单元格合并为一个单元格  
        cell.setColspan(i);  
          
        return cell;  
    }

    /**
     * 取消居中对齐
     * @param str
     * @param font
     * @param i
     * @return
     */
    public static PdfPCell mergeColNoHorizontal(String str,Font font,int i) {
        PdfPCell cell=new PdfPCell(new Paragraph(str,font));
        cell.setMinimumHeight(25);
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        //将该单元格所在行包括该单元格在内的i列单元格合并为一个单元格
        cell.setColspan(i);
        return cell;
    }



    //获取指定内容与字体的单元格
    public static PdfPCell getPDFCell(String string, Font font){
        //创建单元格对象，将内容与字体放入段落中作为单元格内容
        PdfPCell cell=new PdfPCell(new Paragraph(string,font));  
          
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);  
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);  
          
        //设置最小单元格高度  
        cell.setMinimumHeight(25);  
        return cell;  
    }
}
